const http = require('http');
const fs = require('fs');
const url = require('url');
const path = require('path');
const resolve = (filepath) => {
  return path.join(__dirname, filepath);
};

http.createServer((req, res) => {
  // 静态服务

  // 动态服务，会查询数据库
  const {pathname, query} = url.parse(req.url);

  //pathname 有坑你是客户端发起的接口请求
  let method = req.method;

  if (req.headers.origin) { //如果跨域了 才走跨域逻辑
    res.setHeader('Access-Control-Allow-Origin', /*'*'*/ req.headers.origin /*注意http1.0是没有origin请求头的*/); //允许哪些域
    res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,DELETE,POST,OPTIONS');
    //自定义头需要服务器允许
    res.setHeader('Access-Control-Allow-Headers', 'token');
    //此时会发现options请求每次都会重新发送
    //设置options有效时间内 不再发送
    res.setHeader('Access-Control-Max-Age', '10'); //秒为单位

    // 跨域默认是不允许携带cookie的
    res.setHeader('Access-Control-Allow-Credentials', 'true');
  }

  if(method === 'OPTIONS'){
    res.end(); // 如果是预检请求直接返回 浏览器就知道了服务器支持跨域 但如果不设置相关的跨域头 正式的方法请求访问还是会失败
  }

  if(pathname === '/user'){
    switch (method) {
      case 'GET':
        console.log(req.headers['token']);
        res.end(JSON.stringify({name: 'ahhh'}));
        break;
      case 'POST':
        let arr = [];
        // res.setHeader('Set-Cookie', 'a=1'); //这里设置cookie是无效的？
        req.on('data', (chunk) => {
          arr.push(chunk);
        });
        req.on('end', () => {
          console.log(Buffer.concat(arr).toString());
          res.end('{"a":1}'); //因为当前请求是ajax发的 so并不会顶替页面显示
        });
        break;
    }
    return;
  }

  const filepath = resolve(pathname);
  fs.stat(filepath, (err, statobj) => {
    if(err){
      res.statusCode = 404;
      return res.end();
    }
    if(statobj.isFile()){
      // mime header
      return fs.createReadStream(filepath).pipe(res);
    }else{
      res.statusCode = 404;
      return res.end();
    }
  });
}).listen(3000);
